package main

import (
	"fmt"
	"log"
	"oa-rest/common"
	"oa-rest/config"

	"xorm.io/xorm"
)

func main() {
	// 初始化环境变量
	config.InitEnv()

	// 连接数据库
	engine, err := common.ConnectDb()
	if err != nil {
		log.Fatal("数据库连接失败:", err)
	}

	// 为meeting表添加音频相关字段
	err = addAudioFieldsToMeetingTable(engine)
	if err != nil {
		log.Fatal("添加音频字段失败:", err)
	}

	fmt.Println("会议表音频字段添加成功!")
}

// addAudioFieldsToMeetingTable 为meeting表添加音频相关字段
func addAudioFieldsToMeetingTable(engine *xorm.Engine) error {
	tableName := "meeting"

	// 检查字段是否已存在
	checkColumnExists := func(columnName string) (bool, error) {
		var exists bool
		sql := fmt.Sprintf("SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = '%s' AND column_name = '%s')", tableName, columnName)
		_, err := engine.SQL(sql).Get(&exists)
		return exists, err
	}

	// 需要添加的字段列表
	fields := []struct {
		name     string
		dataType string
		comment  string
	}{
		{"audio_url", "VARCHAR(512)", "音频文件URL"},
		{"meeting_minutes", "TEXT", "会议纪要内容"},
		{"audio_transcript", "TEXT", "音频转文字内容"},
		{"audio_processing_time", "DOUBLE PRECISION", "音频处理时间(秒)"},
		{"audio_duration", "DOUBLE PRECISION", "音频时长(秒)"},
		{"audio_processing_method", "VARCHAR(64)", "音频处理方法"},
	}

	// 为每个字段添加SQL
	for _, field := range fields {
		exists, err := checkColumnExists(field.name)
		if err != nil {
			return fmt.Errorf("检查字段 %s 是否存在失败: %v", field.name, err)
		}

		if exists {
			fmt.Printf("字段 %s 已存在，跳过添加\n", field.name)
			continue
		}

		// 添加字段的SQL
		sql := fmt.Sprintf("ALTER TABLE %s ADD COLUMN %s %s", tableName, field.name, field.dataType)

		// 为字段添加注释（PostgreSQL）
		commentSQL := fmt.Sprintf("COMMENT ON COLUMN %s.%s IS '%s'", tableName, field.name, field.comment)

		// 执行添加字段
		_, err = engine.Exec(sql)
		if err != nil {
			return fmt.Errorf("添加字段 %s 失败: %v", field.name, err)
		}

		// 添加注释
		_, err = engine.Exec(commentSQL)
		if err != nil {
			log.Printf("为字段 %s 添加注释失败: %v", field.name, err)
			// 注释添加失败不影响主功能
		}

		fmt.Printf("成功添加字段: %s\n", field.name)
	}

	return nil
}